#ifndef _fd_
#define _fd_


#include "../include/defs.h"

/* Máxima cantidad de fds */
#define FD_MAX 10

typedef struct
{
    int (*init)(void);
    size_t (*setByte)(int b);
    size_t (*getByte)(int *b);
    bool open;
} fdType;

/*File Descriptors manager*/
typedef struct
{
    int cant;
    fdType fds[FD_MAX];
}fileDescriptorManager;

/**
 * Inicializa FDM
 * */
void initFDM(void);

/**
 * fdNew crea un nuevo fd y devuelve su número.
 */
int fdNew(int (*init)(void), size_t (*setByte)(int b), size_t (*getByte)(int * b));

/**
 * fdopen abre el fd y devuelve su puntero.
 */
fdType *fdopen(int fd, const char *mode);

/**
 * fclose cierra el fd.
 */
int fclose(fdType *fdPtr);


#endif
